clc;
close all;

imgSource=double(imread('leaves.pgm'));
ws=10;
k=0.5;
thresh=2;
[height width]=size(imgSource);
ww=2*ws+1; %taille de la fenetre d'analyse
wp=ww^2; %nbre de pixels dans la fenetre

% Calcul du facteur A pour toute l'image [k * moyenne de l'image / variance locale]
% La variance locale peut se calculer de la facon suivante:
% sigma = sqrt(conv2(im.^2,ones(ww)/wp,'same')-conv2(im,ones(ww)/wp,'same').^2)
sigma=sqrt( conv2(imgSource.^2,ones(ww)/wp,'same')-conv2(imgSource,ones(ww)/wp,'same').^2);
amp=k*mean2(imgSource./sigma);

% Filtrer passe bas l'image source
bim = imfilter(imgSource, ones(5).*(1/5^2));

mskf=(abs(imgSource-bim)<thresh);
outim=imgSource+mskf.*amp.*(imgSource-bim); %amplify the small residuals by the amplification factor an

subplot(1,3,1);
imagesc(imgSource);
title('Originale');
colormap('gray');

subplot(1,3,2);
imagesc(bim);
title('Avec filtre passe bas');
colormap('gray');

subplot(1,3,3);
imagesc(outim);
title('Augmentation de la variance locale');
colormap('gray');
